home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / kob / kob001s.lzh / zmdfnc.has < prev   
Encoding:
Text File  |  1996-02-11  |  5.4 KB  |  393 lines

  1.  
  2.     .include    doscall.mac
  3.     .include    iocscall.mac
  4. *    .include    fefunc.h
  5.     .include    fdef.h
  6.  
  7. m_stop        equ    $0a
  8. play_cnv_data    equ    $11
  9. se_play        equ    $12
  10. ZMUSIC    .macro    fnc
  11.     moveq    #fnc,d1
  12.     trap    #3
  13.     .endm
  14.  
  15.  
  16.  
  17.  
  18.     .text
  19.     .even
  20.  
  21. .ifndef    _LIB
  22.     .dc.l    ret
  23.     .dc.l    ret
  24.     .dc.l    zmd_stop
  25.     .dc.l    zmd_stop
  26.     .dc.l    zmd_stop
  27.     .dc.l    ret
  28.     .dc.l    ret
  29.     .dc.l    ret
  30.     .dc.l    ptr_token
  31.     .dc.l    ptr_param
  32.     .dc.l    ptr_exec
  33.     .dc.l    0,0,0,0,0
  34.  
  35.  
  36. zmd_stop:
  37.     bsr    zmusic_check
  38.     tst.b    d1
  39.     bne    @f
  40.     moveq    #0,d2
  41.     moveq    #0,d3
  42.     moveq    #0,d4
  43.     ZMUSIC    m_stop
  44. @@:
  45.  
  46.     lea.l    _zmd_ptr(pc),a0
  47.     move.l    (a0),-(sp)
  48.     beq    @f
  49.     DOS    _MFREE
  50.     clr.l    (a0)
  51. @@:
  52.     addq.l    #4,sp
  53.     clr.l    4(a0)        * zmd_num
  54.     rts
  55.  
  56.  
  57.  
  58. ret:
  59.     rts
  60. ptr_token:
  61.     .dc.b    'toroku_zmd',0
  62.     *.dc.b    'read_zmd',0
  63.     .dc.b    'play_zmd',0
  64.     .dc.b    'play_se',0
  65.     .dc.b    0
  66.     .even
  67. ptr_param:
  68.     .dc.l    p_read_zmd
  69.     .dc.l    p_play_zmd
  70.     .dc.l    p_play_se
  71. ptr_exec:
  72.     .dc.l    e_read_zmd
  73.     .dc.l    e_play_zmd
  74.     .dc.l    e_play_se
  75.  
  76.  
  77. p_read_zmd:
  78.     .dc.w    $0038    * ary1_str
  79.     .dc.w    void_ret
  80.  
  81. p_play_zmd:
  82.     .dc.w    int_val
  83.     .dc.w    void_ret
  84. p_play_se:
  85.     .dc.w    int_val
  86.     *.dc.w    int_omt
  87.     .dc.w    void_ret
  88.  
  89.  
  90.  
  91.  
  92. **    **    **    **    **    **    **    **    **    **
  93. error    .macro    mes,num
  94.     .local    l1
  95.     lea.l    l1(pc),a1
  96.     moveq    #num,d0
  97.     rts
  98. l1:    .dc.b    mes,0
  99.     .even
  100.     .endm
  101.  
  102.  
  103. not_exist_file:
  104.     lea.l    12+12(sp),sp
  105.     moveq    #29,d0
  106.     lea.l    nef2(pc),a0
  107. @@:
  108.     move.b    (a2)+,(a0)+
  109.     dbeq    d0,@b
  110.     move.b    #'"',-1(a0)
  111.     clr.b    (a0)
  112.     lea.l    nef1(pc),a1
  113.     moveq    #3,d0
  114.     rts
  115. nef1:    .dc.b    '指定のファイルがありません。"'
  116. nef2:    .ds.b    32
  117.     .even
  118.  
  119. yet_read_zmd:
  120.     error    'すでに ZMD は読み込んでますよ',4
  121. no_mem:
  122.     error    'メモリを確保出来ませんでした',1
  123. zmusic_err:
  124.     error    'ZMUSIC が常駐していません',2
  125. exist_common_com:
  126.     error    '効果音には共通コマンドは使えません',8
  127.  
  128. not_read_zmd:
  129.     addq.l    #4,sp
  130.     error    'ZMD を登録していません',5
  131. irregular_num:
  132.     addq.l    #4,sp
  133.     error    'ZMD 番号が不正です',6
  134. no_data_zms:
  135.     error    'その番号には ZMD は登録されていません',7
  136.  
  137. **    **    **    **    **    **    **    **    **    **
  138.  
  139. return_zero:
  140.     moveq.l    #0,d0
  141. return_d0:
  142.     lea.l    fac(pc),a0
  143.     move.l    d0,6(a0)
  144.     moveq.l    #0,d0
  145.     rts
  146.  
  147.     .even
  148. fac:
  149.     .dc.w    0
  150.     .dc.l    0
  151.     .dc.l    0
  152.  
  153. **    **    **    **    **    **    **
  154.  * ライブラリ部
  155.  
  156. .else
  157.  
  158.  
  159.     .xdef    _toroku_zmd
  160.     .xdef    _play_zmd
  161.     .xdef    _play_se
  162.  
  163.  
  164.  
  165.  
  166.  
  167. not_exist_file:
  168.     lea.l    12+12-4(sp),sp
  169. not_read_zmd:
  170. irregular_num:
  171.     addq.l    #4,sp
  172. no_data_zms:
  173. yet_read_zmd:
  174. no_mem:
  175. zmusic_err:
  176. exist_common_com:
  177.     moveq    #-1,d0
  178.     rts
  179.  
  180. return_zero:
  181.     moveq    #0,d0
  182. return_d0:
  183.     rts
  184.  
  185.  
  186. .endif
  187.  
  188.  
  189. **    **    **    **    **    **    **    **    **    **
  190. _zmd_ptr:
  191.     .dc.l    0    * ptr ( 0,1,2,...,N )
  192.             * =0 の時未登録
  193. _zmd_num:
  194.     .dc.l    0    * zmd の個数 (=N)
  195. **    **    **    **    **    **    **    **    **    **
  196.  
  197.  
  198. _toroku_zmd:
  199. e_read_zmd:
  200.     bsr    zmusic_check
  201.     tst.b    d1
  202.     bne    zmusic_err
  203.     move.l    _zmd_ptr(pc),d0
  204.     bne    yet_read_zmd
  205.  
  206. .ifndef _LIB
  207.     movea.l    par1+6(sp),a2    * ファイル名リスト
  208.     addq.l    #6,a2
  209.     moveq    #0,d1
  210.     moveq    #0,d2
  211.     movem.w    (a2)+,d1/d2    * 各項のサイズ/添え字の大きさ
  212. .else
  213.     move.l    4(sp),a2
  214.     movem.l    8(sp),d1/d2
  215.     subq.l    #1,d2
  216. .endif
  217.  
  218.     movem.l    d3/d4/a3,-(sp)
  219.     bsr    count_zms
  220.  
  221.     move.l    d0,-(sp)    * メモリ確保
  222.     DOS    _MALLOC
  223.     addq.l    #4,sp
  224.     tst.l    d0
  225.     bmi    no_mem
  226.     movea.l    d0,a3
  227.     move.l    a3,_zmd_ptr
  228.     move.l    d2,_zmd_num
  229.  
  230.     bsr    read_zms
  231.     movem.l    (sp)+,d3/d4/a3
  232.  
  233.     bra    return_zero
  234.  
  235.  
  236.  
  237. **    **    **    **    **    **    **    **    **    **
  238.  
  239.  * 総ファイルサイズを数える
  240. count_zms:
  241.     movem.l    d2/a2,-(sp)
  242.     move.l    d2,d4
  243.     addq.l    #1,d4
  244.     lsl.l    #2,d4        * ptr.list 分
  245.     move.l    #0,d3
  246. count_zms_loop:
  247.         movea.l    a2,a0
  248.         tst.b    (a0)
  249.         beq    @f
  250.             bsr    file_exist
  251.             tst.l    d0
  252.             beq    not_exist_file
  253.             addq.l    #1,d0
  254.             bclr    #0,d0
  255.             add.l    d0,d3
  256.     @@:
  257.         adda.l    d1,a2
  258.     dbra    d2,count_zms_loop
  259.  
  260.     move.l    d3,d0
  261.     add.l    d4,d0
  262.     movem.l    (sp)+,d2/a2
  263.     rts
  264.  
  265.  
  266.  
  267.  * 読み込む
  268. read_zms:
  269.     lea.l    (a3,d4.l),a1        * a3=ptr.list, a1=zmd
  270. read_zms_loop:
  271.         clr.w    -(sp)
  272.         move.l    a2,-(sp)
  273.         DOS    _OPEN
  274.         addq.l    #6,sp
  275.         tst.l    d0
  276.         bge    @f
  277.             clr.l    (a3)+    * 登録されず
  278.             bra    1f
  279.     @@:
  280.         move.l    a1,(a3)+
  281.         move.l    d3,-(sp)
  282.         move.l    a1,-(sp)
  283.         move.w    d0,-(sp)
  284.         DOS    _READ
  285.         addq.l    #1,d0
  286.         bclr    #0,d0
  287.         sub.l    d0,d3
  288.         adda.l    d0,a1
  289.         DOS    _CLOSE
  290.         lea.l    10(sp),sp
  291. 1:
  292.     adda.l    d1,a2
  293.     dbra    d2,read_zms_loop
  294.     rts
  295.  
  296.  
  297.  
  298.  
  299. **    **    **    **    **    **    **    **    **    **
  300.  
  301.  
  302. _play_zmd:
  303. e_play_zmd:
  304.     bsr    zmd共通
  305.     addq.l    #7,a1        * play_cnv_data 用アドレス
  306.     moveq    #0,d2        * 高速応答
  307.     ZMUSIC    play_cnv_data
  308.  
  309.     bra    return_zero
  310.  
  311. _play_se:
  312. e_play_se:
  313.     bsr    zmd共通
  314.     addq.l    #8,a1        * 共通コマンド
  315.     move.w    (a1)+,d0
  316.     addq.w    #1,d0        * $ffff ?
  317.     bne    exist_common_com
  318.  
  319.     moveq    #0,d2
  320.     move.b    7(a1),d2    * 絶対チャンネル
  321.     addq.w    #1,d2        * 割り込むトラック(だといいな)
  322. *    moveq    #8,d2
  323.     ZMUSIC    se_play
  324.  
  325.     bra    return_zero
  326.  
  327.  
  328. zmd共通:
  329.     move.l    _zmd_ptr(pc),d0
  330.     beq    not_read_zmd
  331.     movea.l    d0,a2
  332. .ifndef _LIB
  333.     move.l    par1+6+4(sp),d2        * ZMD NUMBER
  334. .else
  335.     move.l    4+4(sp),d2        * ZMD NUMBER
  336. .endif
  337.     bmi    irregular_num
  338.     cmp.l    _zmd_num(pc),d2
  339.     bhi    irregular_num
  340.     lsl.w    #2,d2
  341.     move.l    (a2,d2.w),d0
  342.     beq    no_data_zms
  343.     movea.l    d0,a1
  344.     rts
  345.  
  346.  
  347. **    **    **    **    **    **    **    **    **    **
  348. file_exist:
  349.     lea.l    -56(sp),sp
  350.     move.w    #$23,-(sp)    * A***HR
  351.     move.l    a0,-(sp)
  352.     pea.l    6(sp)
  353.     DOS    _FILES
  354.  
  355.     tst.l    d0
  356.     bmi    nofile
  357.  
  358.     move.l    10+26(sp),d0    *file_size
  359. *    move.l    10+22(sp),d1    *file_date&time
  360. fe:
  361.     lea.l    10+56(sp),sp
  362.     rts
  363.  
  364. nofile:
  365.     moveq.l    #0,d0
  366.     bra    fe
  367.  
  368. **    **    **    **    **    **    **    **    **    **
  369.  
  370. zmusic_check:
  371.     suba.l    a1,a1
  372.     IOCS    _B_SUPER
  373.     movea.l    d0,a1
  374.  
  375.     movea.l    $8c.w,a0
  376.     subq.l    #8,a0
  377.     cmpi.l    #'ZmuS',(a0)+
  378.     bne    @f
  379.     cmpi.w    #'iC',(a0)
  380. @@:
  381.     sne.b    d1        * 常駐 d1.b=$00
  382.  
  383.     IOCS    _B_SUPER
  384.     rts
  385.  
  386.  
  387.  
  388.  
  389.  
  390.     .end
  391.  
  392.  
  393.